package cn.wzc.crystal.platform.logic;

import cn.wzc.crystal.platform.support.Code;
import lombok.Getter;

import java.util.HashMap;
import java.util.Map;

/**
 * 逻辑处理上下文
 */
public class LogicContext {

	private final Map<String, Object> value = new HashMap<>();

	@Getter
	private Code code;

	@Getter
	private boolean success = true;

	@SuppressWarnings("unchecked")
	public <T extends LogicContext> T fail(Code code) {
		this.code = code;
		this.success = false;
		return (T) this;
	}

	@SuppressWarnings("unchecked")
	public <T extends LogicContext> T success(Code code) {
		this.code = code;
		this.success = true;
		return (T) this;
	}

	/**
	 * 获取一个上下文的值
	 *
	 * @param key 属性名称
	 * @param <T> 值类型
	 * @return 对应值, 如果不存在则返回null
	 */
	@SuppressWarnings("unchecked")
	public <T> T getValue(String key) {
		return (T) value.get(key);
	}

	/**
	 * 设置一个上下文的值
	 *
	 * @param key 属性名称
	 * @param v   值
	 * @param <T> 属性类型
	 */
	public <T> LogicContext setValue(String key, T v) {
		value.put(key, v);
		return this;
	}


}
